GuardDutyを一発で有効化して通知設定するテンプレート作った(Topic指定版)
こんにちは、臼田です。
以前GuardDutyを全リージョンで有効化するテンプレートを作成しました。
このときは全リージョンで通知の設定をする都合上新しいSNS Topicを作成していますが、既存のTopicを利用したいケースもあるのでそのテンプレートも作成しました。
テンプレート
こちらに置きました。コードも以下に乗せておきます。CloudFormationからはリンク指定して実行すると楽だと思います。
AWSTemplateFormatVersion: 2010-09-09 Description: 'enable guardduty and set alert' Parameters: TopicARN: Description: Enter SNS Topic ARN(e.g. arn:aws:sns:region:account_id:topic_name) to send notification. Type: String Resources: GDD: Type: 'AWS::GuardDuty::Detector' Properties: Enable: true ER: Type: 'AWS::Events::Rule' Properties: Name: AlertGuardDutyFindings Description: 'Alert to SNS topic when find threats by GuardDuty' EventPattern: { "source": [ "aws.guardduty" ], "detail-type": [ "GuardDuty Finding" ] } Targets: - Arn: !Ref TopicARN Id: Id123
これにより下記が実行されます。
- GuardDutyの有効化
- CloudWatch Event RuleにてGuardDutyで検知したらSNSで通知するように設定
使い方
テンプレート実行
CloudFormationのスタック作成画面から「URL指定」で上記のURLを入力して次へ進みます。
スタック名と通知対象とするSNS TopicのARNを入力して次へ進みます。あとはそのまま進んで作成を完了します。
SNS Topicのポリシー追加
2019/05/28追記 本項目を追加しました
既存のSNS Topicの設定によっては、CloudWatch Eventからの通知を受け取れないポリシーになっている可能性があります。(デフォルトでは受け取れません)
したがって、これを変更してあげる必要があります。具体的には下記のポリシーが必要になります。
{ "Sid": "AWSEvents_AlertGuardDutyFindings_Id123", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:ap-northeast-1:999999999999:GuardDutyTopic" }
ポリシーを直接書き換えてもいいのですが、マネジメントコンソールでテンプレートから作成されたCloud Watch Eventを更新してあげるだけで自動的に追加できます。
CloudWacth Eventのルールから作成されたルールを選択します。
右上の「アクション」から「編集」します。
何も変更せずに「設定の詳細」へ移動します。
引き続き何も変更せずに「ルールの更新」を押します。表示されているように、ターゲット(SNS)に必要なアクセス権限(トピックポリシー)を自動的に追加してくれます。
以上で完了です。
まとめ
今回はさっくりとですが既存のSNS Topicを利用したGuardDutyの通知設定を行いました。
本当は、全リージョンで同じようなことができればベターですが、GuardDutyはリージョンごとに通知の設定を行う必要があり、リージョンをまたがったSNSの利用が出来ないため、リージョンごとに別々のSNS Topicが必要になり、テンプレートでの一発実行は実現できません。
GuardDutyの通知内容を1つのリージョンにまとめる、とか出来るようになったらサイコーですけどね、その時を待ちましょう!